//
// Created by ChaoDONG on 2021-03-24.
//

/* byebye.c -- atexit() example */
#include <stdio.h>
#include <stdlib.h>
void sign_off(void);
void too_bad(void);
int main(void)
{
    int n;
    atexit(sign_off); /* register the sign_off() function */
    puts("Enter an integer:");
    if (scanf("%d",&n) != 1)
    {
        puts("That's no integer!");
        atexit(too_bad); /* 注册 too_bad()函数 */
        /* atexit()函数通过退出时注册被调用的函数提供这种功能 */
        /* 该程序中把sign_off或too_bad作为参数。
         * 然后，atexit()注册函数列表中的函数，当调用exit()时就会执行这些函数。
         * */

        exit(EXIT_FAILURE);
        /* 在main()返回系统时将自动调用exit()函数 */
        /* exit()执行完atexit()指定的函数后，
         * 会完成一些清理工作：刷新所有输出流、
         * 关闭所有打开的流和关闭由标准I/O函数tmpfile()创建的临时文件。
         * */
    }
    printf("%d is %s.\n", n, (n % 2 == 0)? "even" : "odd");
    return 0;
}
void sign_off(void)
{
    puts("Thus terminates another magnificent program from");
    puts("SeeSaw Software!");
}
void too_bad(void)
{
    puts("SeeSaw Software extends its heartfelt condolences");
    puts("to you upon the failure of your program.");
}